home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_01_05 / 1n05018a < prev    next >
Text File  |  1990-03-25  |  4KB  |  156 lines

  1. /* Listing 1
  2.  
  3.    test.c: Program to test data blocks and modify them
  4.  
  5.    Written by Hugh Staley
  6.               Box 842
  7.               Los Alamos, NM 87544
  8.  */
  9.  
  10. #include <stdio.h>
  11. #include <string.h>
  12.  
  13. /* Data block & offsets */
  14. #define FILEOFFSET  0X9999L
  15.  
  16. #define CT       0      /* Offset for int Count */
  17. #define LE    CT+2      /* Offset for int Length */
  18. #define OS    LE+2      /* Offset for long Offset */
  19. #define Q1    OS+4      /* Offset for char Question1 */
  20. #define Q2    Q1+5      /* Offset for char Question2 */
  21. #define BL   Q2+10      /* Total Block Length */
  22.  
  23. char Parameters [BL] = {"FILE BLOCK 1          "};
  24.  
  25. void Initialize (Count, Length, Offset, Question1, Question2)
  26.     int  *Count, *Length;
  27.     long *Offset;
  28.     char Question1 [], Question2 [];
  29.  
  30.     {
  31.     *Count = 10;
  32.     *Length = 60;
  33.     *Offset = -1L;
  34.     strcpy (Question1, "How?");
  35.     strcpy (Question2, "Why me?");
  36.     }   /* Initialize the block */
  37.  
  38. void Request (Count, Length, Offset, Question1, Question2)
  39.     int  *Count, *Length;
  40.     long *Offset;
  41.     char Question1 [], Question2 [];
  42.  
  43.     {
  44.     printf ("What is the count? ");
  45.     scanf ("%d", Count);
  46.  
  47.     printf ("What is the length? ");
  48.     scanf ("%d", Length);
  49.  
  50.     printf ("What is the offset? ");
  51.     scanf ("%ld", Offset);
  52.  
  53.     while (getc (stdin) != '\n')
  54.         /* dump input characters */ ;
  55.  
  56.     printf ("What is question 1 text? ");
  57.     gets (Question1);
  58.  
  59.     printf ("What is question 2 text? ");
  60.     gets (Question2);
  61.     }   /* Request parameters */
  62.  
  63. void Display (Count, Length, Offset, Question1, Question2)
  64.     int  Count, Length;
  65.     long Offset;
  66.     char Question1 [], Question2 [];
  67.  
  68.     {
  69.     printf ("The count is %d\n", Count);
  70.     printf ("The length is %d\n", Length);
  71.     printf ("The offset is %ld\n", Offset);
  72.     printf ("Question 1 is %s\n", Question1);
  73.     printf ("Question 2 is %s\n", Question2);
  74.     }   /* Display the parameters */
  75.  
  76. void Save (Block)
  77.     char Block [];
  78.  
  79.     {
  80.     FILE *fd;
  81.     int i;
  82.  
  83.     if ((fd = fopen ("TEST.EXE", "r+b")) != NULL)
  84.         {
  85.         fseek (fd, FILEOFFSET, SEEK_SET);
  86.         for (i = 0; i < BL; ++i)
  87.             fputc (Parameters [i], fd);
  88.         fclose (fd);
  89.         }
  90.     }   /* Save a block of parameters */
  91.  
  92. void Load (Block)
  93.     char Block [];
  94.  
  95.     {
  96.     FILE *fd;
  97.     int i;
  98.  
  99.     if ((fd = fopen ("TEST.EXE", "rb")) != NULL)
  100.         {
  101.         fseek (fd, FILEOFFSET, SEEK_SET);
  102.         for (i = 0; i < BL; ++i)
  103.             Parameters [i] = fgetc (fd);
  104.         fclose (fd);
  105.         }
  106.     }   /* Load block of parameters */
  107.  
  108. main ()
  109.     {
  110.     char Option, Command [10];
  111.     int  Okay;
  112.  
  113.     /* declarations to divide block into variables */
  114.     int  *Count = (int *)(Parameters + CT),
  115.          *Length = (int *)(Parameters + LE);
  116.     long *Offset = (long *)(Parameters + OS);
  117.     char *Question1 = Parameters + Q1,
  118.          *Question2 = Parameters + Q2;
  119.  
  120.     do
  121.         {
  122.         do
  123.             {
  124.             printf ("\n--------------------\nDo you want to\n");
  125.             printf ("    Display the parameters\n");
  126.             printf ("    Initialize the parameters\n");
  127.             printf ("    Load a block\n");
  128.             printf ("    Quit the program\n");
  129.             printf ("    Request the parameters\n");
  130.             printf ("    Save a block\n");
  131.             gets (Command);
  132.             Option = tolower (*Command);
  133.             if (! (Okay = (int)strchr ("dilqrs", Option)))
  134.                 printf ("Your answer must be one of the list.\n");
  135.             }
  136.             while (! Okay);
  137.  
  138.         switch (Option)
  139.             {
  140.             case 'i':  Initialize (Count, Length, Offset,
  141.                                    Question1, Question2);
  142.                        break;
  143.             case 'r':  Request (Count, Length, Offset,
  144.                                 Question1, Question2);
  145.                        break;
  146.             case 's':  Save (Parameters); break;
  147.             case 'd':  Display (*Count, *Length, *Offset,
  148.                                 Question1, Question2);
  149.                        break;
  150.             case 'l':  Load (Parameters); break;
  151.             }
  152.         }
  153.         while (Option != 'q');
  154.     }
  155.  
  156.